columnview: Add GtkColumnViewCell
authorBenjamin Otte <otte@redhat.com>
Sat, 2 Nov 2019 05:15:38 +0000 (06:15 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 30 May 2020 23:26:46 +0000 (19:26 -0400)
It's a GtkListItemWidget subclass that tracks the column it belongs to
and allows the column to track it.

We also use this subclass to implement sizing support so columns share
the same size and get resized in sync.

docs/reference/gtk/meson.build
gtk/gtkcolumnlistitemfactory.c
gtk/gtkcolumnview.c
gtk/gtkcolumnviewcell.c [new file with mode: 0644]
gtk/gtkcolumnviewcellprivate.h [new file with mode: 0644]
gtk/gtkcolumnviewcolumn.c
gtk/gtkcolumnviewcolumnprivate.h
gtk/gtkcolumnviewprivate.h
gtk/meson.build

index dcc887b87a30eea2c55ccef01f8ab878bef6b839..e002c3fedadcd1d8ea847385436fbf4a5a6f216c 100644 (file)
@@ -25,6 +25,7 @@ private_headers = [
   'gtkcolorscaleprivate.h',
   'gtkcolorswatchprivate.h',
   'gtkcolumnlistitemfactoryprivate.h',
+  'gtkcolumnviewcellprivate.h',
   'gtkcolumnviewcolumnprivate.h',
   'gtkcolumnviewprivate.h',
   'gtkcomboboxprivate.h',
index 6f14363c06e576bdd38276b17e05a0c4c49d580b..ac5c3e17662bf783880bb369d404e5ec4814a468 100644 (file)
@@ -40,20 +40,6 @@ struct _GtkColumnListItemFactoryClass
 
 G_DEFINE_TYPE (GtkColumnListItemFactory, gtk_column_list_item_factory, GTK_TYPE_LIST_ITEM_FACTORY)
 
-static GtkListItemWidget *
-get_nth_child (GtkListItemWidget *parent,
-               guint              pos)
-{
-  GtkWidget *child;
-  guint i;
-
-  child = gtk_widget_get_first_child (GTK_WIDGET (parent));
-  for (i = 1; i < pos && child; i++)
-    child = gtk_widget_get_next_sibling (child);
-
-  return GTK_LIST_ITEM_WIDGET (child);
-}
-
 static void
 gtk_column_list_item_factory_setup (GtkListItemFactory *factory,
                                     GtkListItemWidget  *widget,
@@ -63,7 +49,8 @@ gtk_column_list_item_factory_setup (GtkListItemFactory *factory,
   GListModel *columns;
   guint i;
 
-  gtk_widget_set_layout_manager (GTK_WIDGET (list_item->owner),
+  /* FIXME: evil */
+  gtk_widget_set_layout_manager (GTK_WIDGET (widget),
                                  gtk_box_layout_new (GTK_ORIENTATION_HORIZONTAL));
 
   GTK_LIST_ITEM_FACTORY_CLASS (gtk_column_list_item_factory_parent_class)->setup (factory, widget, list_item);
@@ -90,11 +77,9 @@ gtk_column_list_item_factory_teardown (GtkListItemFactory *factory,
 
   GTK_LIST_ITEM_FACTORY_CLASS (gtk_column_list_item_factory_parent_class)->teardown (factory, widget, list_item);
 
-  for (child = gtk_widget_get_first_child (GTK_WIDGET (list_item->owner));
-       child;
-       child = gtk_widget_get_first_child (GTK_WIDGET (list_item->owner)))
+  while ((child = gtk_widget_get_first_child (GTK_WIDGET (widget))))
     {
-      gtk_list_item_widget_remove_child (list_item->owner, child);
+      gtk_list_item_widget_remove_child (GTK_LIST_ITEM_WIDGET (widget), child);
     }
 }
 
@@ -151,28 +136,12 @@ gtk_column_list_item_factory_add_column (GtkColumnListItemFactory *factory,
                                          GtkColumnViewColumn      *column,
                                          gboolean                  check_bind)
 {
-  GtkListItemFactory *column_factory;
   GtkWidget *cell;
 
-  column_factory = gtk_column_view_column_get_factory (column);
-
-  cell = gtk_list_item_widget_new (column_factory, "cell");
+  cell = gtk_column_view_cell_new (column);
   gtk_list_item_widget_add_child (GTK_LIST_ITEM_WIDGET (list_item), GTK_WIDGET (cell));
   gtk_list_item_widget_update (GTK_LIST_ITEM_WIDGET (cell),
                                gtk_list_item_widget_get_position (list_item),
                                gtk_list_item_widget_get_item (list_item),
                                gtk_list_item_widget_get_selected (list_item));
 }
-
-void
-gtk_column_list_item_factory_remove_column (GtkColumnListItemFactory *factory,
-                                            GtkListItemWidget        *list_item,
-                                            guint                     col_pos,
-                                            GtkColumnViewColumn      *column)
-{
-  GtkListItemWidget *cell;
-
-  cell = get_nth_child (list_item, col_pos);
-
-  gtk_list_item_widget_remove_child (GTK_LIST_ITEM_WIDGET (list_item), GTK_WIDGET (cell));
-}
index 603bde45bf874a74c78890d9c93c861b87801c63..932b8d74d14a1262b2f9937f7ae6150fac2d72e1 100644 (file)
@@ -117,30 +117,6 @@ G_DEFINE_TYPE_WITH_CODE (GtkColumnView, gtk_column_view, GTK_TYPE_WIDGET,
 static GParamSpec *properties[N_PROPS] = { NULL, };
 static guint signals[LAST_SIGNAL] = { 0 };
 
-/* For now we do the iter with the children. We might switch that
- * to use the item manager or track children directly in the factory
- * later (depending on how code changes), so having this abstraction makes sense.
- */
-GtkColumnViewIter *
-gtk_column_view_iter_init (GtkColumnView *self)
-{
-  return (GtkColumnViewIter *) gtk_widget_get_first_child (GTK_WIDGET (self->listview));
-}
-
-GtkWidget *
-gtk_column_view_iter_get_widget (GtkColumnView     *self,
-                                 GtkColumnViewIter *iter)
-{
-  return GTK_WIDGET (iter);
-}
-
-GtkColumnViewIter *
-gtk_column_view_iter_next (GtkColumnView     *self,
-                           GtkColumnViewIter *iter)
-{
-  return (GtkColumnViewIter *) gtk_widget_get_next_sibling (GTK_WIDGET (iter));
-}
-
 static void
 gtk_column_view_activate_cb (GtkListView   *listview,
                              guint          pos,
@@ -513,24 +489,12 @@ void
 gtk_column_view_append_column (GtkColumnView       *self,
                                GtkColumnViewColumn *column)
 {
-  GtkColumnViewIter *iter;
-
   g_return_if_fail (GTK_IS_COLUMN_VIEW (self));
   g_return_if_fail (GTK_IS_COLUMN_VIEW_COLUMN (column));
   g_return_if_fail (gtk_column_view_column_get_column_view (column) == NULL);
 
   gtk_column_view_column_set_column_view (column, self);
   g_list_store_append (self->columns, column);
-
-  for (iter = gtk_column_view_iter_init (self);
-       iter != NULL;
-       iter = gtk_column_view_iter_next (self, iter))
-    {
-      gtk_column_list_item_factory_add_column (self->factory,
-                                               GTK_LIST_ITEM_WIDGET (gtk_column_view_iter_get_widget (self, iter)),
-                                               column,
-                                               TRUE);
-    }
 }
 
 /**
@@ -544,7 +508,6 @@ void
 gtk_column_view_remove_column (GtkColumnView       *self,
                                GtkColumnViewColumn *column)
 {
-  GtkColumnViewIter *iter;
   guint i;
 
   g_return_if_fail (GTK_IS_COLUMN_VIEW (self));
@@ -560,18 +523,6 @@ gtk_column_view_remove_column (GtkColumnView       *self,
         break;
     }
 
-  g_assert (i < g_list_model_get_n_items (G_LIST_MODEL (self->columns)));
-
-  for (iter = gtk_column_view_iter_init (self);
-       iter != NULL;
-       iter = gtk_column_view_iter_next (self, iter))
-    {
-      gtk_column_list_item_factory_remove_column (self->factory,
-                                                  GTK_LIST_ITEM_WIDGET (gtk_column_view_iter_get_widget (self, iter)),
-                                                  i,
-                                                  column);
-    }
-
   gtk_column_view_column_set_column_view (column, NULL);
   g_list_store_remove (self->columns, i);
 }
diff --git a/gtk/gtkcolumnviewcell.c b/gtk/gtkcolumnviewcell.c
new file mode 100644 (file)
index 0000000..db3085d
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * Copyright © 2019 Benjamin Otte
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: Benjamin Otte <otte@gnome.org>
+ */
+
+#include "config.h"
+
+#include "gtkcolumnviewcellprivate.h"
+
+#include "gtkcolumnviewcolumnprivate.h"
+#include "gtkintl.h"
+#include "gtklistitemwidgetprivate.h"
+#include "gtkwidgetprivate.h"
+
+struct _GtkColumnViewCell
+{
+  GtkListItemWidget parent_instance;
+
+  GtkColumnViewColumn *column;
+
+  /* This list isn't sorted - next/prev refer to list elements, not rows in the list */
+  GtkColumnViewCell *next_cell;
+  GtkColumnViewCell *prev_cell;
+};
+
+struct _GtkColumnViewCellClass
+{
+  GtkListItemWidgetClass parent_class;
+};
+
+G_DEFINE_TYPE (GtkColumnViewCell, gtk_column_view_cell, GTK_TYPE_LIST_ITEM_WIDGET)
+
+void
+gtk_column_view_cell_measure_contents (GtkColumnViewCell *self,
+                                       int               *minimum,
+                                       int               *natural)
+{
+  GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (self));
+
+  if (child)
+    gtk_widget_measure (child, GTK_ORIENTATION_HORIZONTAL, -1, minimum, natural, NULL, NULL);
+}
+
+static void
+gtk_column_view_cell_measure (GtkWidget      *widget,
+                              GtkOrientation  orientation,
+                              int             for_size,
+                              int            *minimum,
+                              int            *natural,
+                              int            *minimum_baseline,
+                              int            *natural_baseline)
+{
+  GtkColumnViewCell *self = GTK_COLUMN_VIEW_CELL (widget);
+
+  if (orientation == GTK_ORIENTATION_HORIZONTAL)
+    {
+      gtk_column_view_column_measure (self->column, minimum, natural);
+    }
+  else
+    {
+      GtkWidget *child = gtk_widget_get_first_child (GTK_WIDGET (self));
+
+      if (child)
+        gtk_widget_measure (child, orientation, for_size, minimum, natural, minimum_baseline, natural_baseline);
+    }
+}
+
+static void
+gtk_column_view_cell_size_allocate (GtkWidget *widget,
+                                    int        width,
+                                    int        height,
+                                    int        baseline)
+{
+  GtkWidget *child = gtk_widget_get_first_child (widget);
+
+  if (child)
+    gtk_widget_allocate (child, width, height, baseline, NULL);
+}
+
+static void
+gtk_column_view_cell_root (GtkWidget *widget)
+{
+  GtkColumnViewCell *self = GTK_COLUMN_VIEW_CELL (widget);
+
+  GTK_WIDGET_CLASS (gtk_column_view_cell_parent_class)->root (widget);
+
+  self->next_cell = gtk_column_view_column_get_first_cell (self->column);
+  if (self->next_cell)
+    self->next_cell->prev_cell = self;
+
+  gtk_column_view_column_add_cell (self->column, self);
+}
+
+static void
+gtk_column_view_cell_unroot (GtkWidget *widget)
+{
+  GtkColumnViewCell *self = GTK_COLUMN_VIEW_CELL (widget);
+
+  gtk_column_view_column_remove_cell (self->column, self);
+
+  if (self->prev_cell)
+    self->prev_cell->next_cell = self->next_cell;
+  if (self->next_cell)
+    self->next_cell->prev_cell = self->prev_cell;
+
+  self->prev_cell = NULL;
+  self->next_cell = NULL;
+
+  GTK_WIDGET_CLASS (gtk_column_view_cell_parent_class)->unroot (widget);
+}
+
+static void
+gtk_column_view_cell_dispose (GObject *object)
+{
+  GtkColumnViewCell *self = GTK_COLUMN_VIEW_CELL (object);
+
+  g_clear_object (&self->column);
+
+  G_OBJECT_CLASS (gtk_column_view_cell_parent_class)->dispose (object);
+}
+
+static void
+gtk_column_view_cell_class_init (GtkColumnViewCellClass *klass)
+{
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  widget_class->root = gtk_column_view_cell_root;
+  widget_class->unroot = gtk_column_view_cell_unroot;
+  widget_class->measure = gtk_column_view_cell_measure;
+  widget_class->size_allocate = gtk_column_view_cell_size_allocate;
+
+  gobject_class->dispose = gtk_column_view_cell_dispose;
+
+  gtk_widget_class_set_css_name (widget_class, I_("cell"));
+}
+
+static void
+gtk_column_view_cell_resize_func (GtkWidget *widget)
+{
+  GtkColumnViewCell *self = GTK_COLUMN_VIEW_CELL (widget);
+
+  if (self->column)
+    gtk_column_view_column_queue_resize (self->column);
+}
+
+static void
+gtk_column_view_cell_init (GtkColumnViewCell *self)
+{
+  GtkWidget *widget = GTK_WIDGET (self);
+
+  gtk_widget_set_can_focus (widget, FALSE);
+  /* FIXME: Figure out if settting the manager class to INVALID should work */
+  gtk_widget_set_layout_manager (widget, NULL);
+  widget->priv->resize_func = gtk_column_view_cell_resize_func;
+}
+
+GtkWidget *
+gtk_column_view_cell_new (GtkColumnViewColumn *column)
+{
+  GtkColumnViewCell *cell;
+
+  cell = g_object_new (GTK_TYPE_COLUMN_VIEW_CELL,
+                       "factory", gtk_column_view_column_get_factory (column),
+                       NULL);
+
+  cell->column = g_object_ref (column);
+
+  return GTK_WIDGET (cell);
+}
+
+void
+gtk_column_view_cell_remove (GtkColumnViewCell *self)
+{
+  GtkWidget *widget = GTK_WIDGET (self);
+
+  gtk_list_item_widget_remove_child (GTK_LIST_ITEM_WIDGET (gtk_widget_get_parent (widget)), widget);
+}
+
+GtkColumnViewCell *
+gtk_column_view_cell_get_next (GtkColumnViewCell *self)
+{
+  return self->next_cell;
+}
+
+GtkColumnViewCell *
+gtk_column_view_cell_get_prev (GtkColumnViewCell *self)
+{
+  return self->prev_cell;
+}
diff --git a/gtk/gtkcolumnviewcellprivate.h b/gtk/gtkcolumnviewcellprivate.h
new file mode 100644 (file)
index 0000000..1ebdc71
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright © 2019 Benjamin Otte
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: Benjamin Otte <otte@gnome.org>
+ */
+
+#ifndef __GTK_COLUMN_VIEW_CELL_PRIVATE_H__
+#define __GTK_COLUMN_VIEW_CELL_PRIVATE_H__
+
+#include "gtkcolumnviewcolumn.h"
+
+G_BEGIN_DECLS
+
+#define GTK_TYPE_COLUMN_VIEW_CELL         (gtk_column_view_cell_get_type ())
+#define GTK_COLUMN_VIEW_CELL(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_COLUMN_VIEW_CELL, GtkColumnViewCell))
+#define GTK_COLUMN_VIEW_CELL_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST ((k), GTK_TYPE_COLUMN_VIEW_CELL, GtkColumnViewCellClass))
+#define GTK_IS_COLUMN_VIEW_CELL(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_COLUMN_VIEW_CELL))
+#define GTK_IS_COLUMN_VIEW_CELL_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), GTK_TYPE_COLUMN_VIEW_CELL))
+#define GTK_COLUMN_VIEW_CELL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GTK_TYPE_COLUMN_VIEW_CELL, GtkColumnViewCellClass))
+
+typedef struct _GtkColumnViewCell GtkColumnViewCell;
+typedef struct _GtkColumnViewCellClass GtkColumnViewCellClass;
+
+GType                   gtk_column_view_cell_get_type           (void) G_GNUC_CONST;
+
+GtkWidget *             gtk_column_view_cell_new                (GtkColumnViewColumn    *column);
+
+void                    gtk_column_view_cell_remove             (GtkColumnViewCell      *self);
+
+GtkColumnViewCell *     gtk_column_view_cell_get_next           (GtkColumnViewCell      *self);
+GtkColumnViewCell *     gtk_column_view_cell_get_prev           (GtkColumnViewCell      *self);
+
+void                    gtk_column_view_cell_measure_contents   (GtkColumnViewCell      *self,
+                                                                 int                    *minimum,
+                                                                 int                    *natural);
+
+G_END_DECLS
+
+#endif  /* __GTK_COLUMN_VIEW_CELL_PRIVATE_H__ */
index b500d7654fe1f55810e692da6103eee2e2fceada..a34e81fa847ac6d0bdc97eecb7b18d82bf5ea877 100644 (file)
 
 #include "gtkintl.h"
 #include "gtklistbaseprivate.h"
-#include "gtklistitemmanagerprivate.h"
+#include "gtklistitemwidgetprivate.h"
 #include "gtkmain.h"
 #include "gtkprivate.h"
 #include "gtkrbtreeprivate.h"
+#include "gtksizegroup.h"
 #include "gtkstylecontext.h"
 #include "gtkwidgetprivate.h"
 
@@ -48,6 +49,12 @@ struct _GtkColumnViewColumn
 
   /* data for the view */
   GtkColumnView *view;
+
+  int minimum_size_request;
+  int natural_size_request;
+
+  /* This list isn't sorted - this is just caching for performance */
+  GtkColumnViewCell *first_cell; /* no reference, just caching */
 };
 
 struct _GtkColumnViewColumnClass
@@ -75,6 +82,8 @@ gtk_column_view_column_dispose (GObject *object)
   GtkColumnViewColumn *self = GTK_COLUMN_VIEW_COLUMN (object);
 
   g_assert (self->view == NULL); /* would hold a ref otherwise */
+  g_assert (self->first_cell == NULL); /* no view = no children */
+
   g_clear_object (&self->factory);
   g_clear_pointer (&self->title, g_free);
 
@@ -184,6 +193,8 @@ gtk_column_view_column_class_init (GtkColumnViewColumnClass *klass)
 static void
 gtk_column_view_column_init (GtkColumnViewColumn *self)
 {
+  self->minimum_size_request = -1;
+  self->natural_size_request = -1;
 }
 
 /**
@@ -241,6 +252,122 @@ gtk_column_view_column_new_with_factory (const char         *title,
   return result;
 }
 
+GtkColumnViewCell *
+gtk_column_view_column_get_first_cell (GtkColumnViewColumn *self)
+{
+  return self->first_cell;
+}
+
+void
+gtk_column_view_column_add_cell (GtkColumnViewColumn *self,      
+                                 GtkColumnViewCell   *cell)
+{
+  self->first_cell = cell;
+
+  gtk_column_view_column_queue_resize (self);
+}
+
+void
+gtk_column_view_column_remove_cell (GtkColumnViewColumn *self,
+                                    GtkColumnViewCell   *cell)
+{
+  if (cell == self->first_cell)
+    self->first_cell = gtk_column_view_cell_get_next (cell);
+
+  gtk_column_view_column_queue_resize (self);
+  gtk_widget_queue_resize (GTK_WIDGET (cell));
+}
+
+void
+gtk_column_view_column_queue_resize (GtkColumnViewColumn *self)
+{
+  GtkColumnViewCell *cell;
+
+  if (self->minimum_size_request < 0)
+    return;
+
+  self->minimum_size_request = -1;
+  self->natural_size_request = -1;
+
+  for (cell = self->first_cell; cell; cell = gtk_column_view_cell_get_next (cell))
+    {
+      gtk_widget_queue_resize (GTK_WIDGET (cell));
+    }
+}
+
+void
+gtk_column_view_column_measure (GtkColumnViewColumn *self,
+                                int                 *minimum,
+                                int                 *natural)
+{
+  if (self->minimum_size_request < 0)
+    {
+      GtkColumnViewCell *cell;
+      int min, nat, cell_min, cell_nat;
+
+      min = 0;
+      nat = 0;
+
+      for (cell = self->first_cell; cell; cell = gtk_column_view_cell_get_next (cell))
+        {
+          gtk_column_view_cell_measure_contents (cell, &cell_min, &cell_nat);
+
+          min = MAX (min, cell_min);
+          nat = MAX (nat, cell_nat);
+        }
+
+      self->minimum_size_request = min;
+      self->natural_size_request = nat;
+    }
+
+  *minimum = self->minimum_size_request;
+  *natural = self->natural_size_request;
+}
+
+static void
+gtk_column_view_column_create_cells (GtkColumnViewColumn *self)
+{
+  GtkWidget *row;
+
+  if (self->first_cell)
+    return;
+
+  for (row = gtk_widget_get_first_child (GTK_WIDGET (self->view));
+       row != NULL;
+       row = gtk_widget_get_next_sibling (row))
+    {
+      GtkListItemWidget *list_item;
+      GtkWidget *cell;
+
+      if (!gtk_widget_get_root (row))
+        continue;
+
+      list_item = GTK_LIST_ITEM_WIDGET (row);
+      cell = gtk_column_view_cell_new (self);
+      gtk_list_item_widget_add_child (list_item, cell);
+      gtk_list_item_widget_update (GTK_LIST_ITEM_WIDGET (cell),
+                                   gtk_list_item_widget_get_position (list_item),
+                                   gtk_list_item_widget_get_item (list_item),
+                                   gtk_list_item_widget_get_selected (list_item));
+    }
+}
+
+static void
+gtk_column_view_column_remove_cells (GtkColumnViewColumn *self)
+{
+  while (self->first_cell)
+    gtk_column_view_cell_remove (self->first_cell);
+}
+
+static void
+gtk_column_view_column_ensure_cells (GtkColumnViewColumn *self)
+{
+  if (self->view && gtk_widget_get_root (GTK_WIDGET (self->view)))
+    gtk_column_view_column_create_cells (self);
+  else
+    gtk_column_view_column_remove_cells (self);
+}
+
 /**
  * gtk_column_view_column_get_column_view:
  * @self: a #GtkColumnViewColumn
@@ -268,6 +395,9 @@ gtk_column_view_column_set_column_view (GtkColumnViewColumn *self,
 
   self->view = view;
 
+  if (view)
+    gtk_column_view_column_ensure_cells (self);
+
   g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_COLUMN_VIEW]);
 }
 
@@ -348,3 +478,4 @@ gtk_column_view_column_get_title (GtkColumnViewColumn *self)
 
   return self->title;
 }
+
index fcdcdaaf1a4ce75ba5511631ff4a0e229b72f852..fc0fe07c7807f073d906ea1f6770f0fb6299be0b 100644 (file)
 
 #include "gtk/gtkcolumnviewcolumn.h"
 
+#include "gtk/gtkcolumnviewcellprivate.h"
+
 void                    gtk_column_view_column_set_column_view          (GtkColumnViewColumn    *self,
                                                                          GtkColumnView          *view);
 
+void                    gtk_column_view_column_add_cell                 (GtkColumnViewColumn    *self,
+                                                                         GtkColumnViewCell      *cell);
+void                    gtk_column_view_column_remove_cell              (GtkColumnViewColumn    *self,
+                                                                         GtkColumnViewCell      *cell);
+GtkColumnViewCell *     gtk_column_view_column_get_first_cell           (GtkColumnViewColumn    *self);
+
+void                    gtk_column_view_column_queue_resize             (GtkColumnViewColumn    *self);
+void                    gtk_column_view_column_measure                  (GtkColumnViewColumn    *self,
+                                                                         int                    *minimum,
+                                                                         int                    *natural);
 
 #endif  /* __GTK_COLUMN_VIEW_COLUMN_PRIVATE_H__ */
index a4e0f17885322615fdcdf6173dd0967f879e7ac5..417a942ab41938c53df313033aaea72b6417a8d8 100644 (file)
 
 #include "gtk/gtkcolumnview.h"
 
-/* This is really just a GtkListItemManagerItem for now, but
- * proper layering ftw */
-typedef struct _GtkColumnViewIter GtkColumnViewIter;
-
-GtkColumnViewIter *     gtk_column_view_iter_init               (GtkColumnView          *self);
-GtkWidget *             gtk_column_view_iter_get_widget         (GtkColumnView          *self,
-                                                                 GtkColumnViewIter      *iter);
-GtkColumnViewIter *     gtk_column_view_iter_next               (GtkColumnView          *self,
-                                                                 GtkColumnViewIter      *iter);
 
 #endif  /* __GTK_COLUMN_VIEW_PRIVATE_H__ */
index 20d8e71099203e763eea59d456ec8ee23df86b73..80fffed33ed1fae60b4783ca8510db0c6a196913 100644 (file)
@@ -195,6 +195,7 @@ gtk_public_sources = files([
   'gtkcolorutils.c',
   'gtkcolumnlistitemfactory.c',
   'gtkcolumnview.c',
+  'gtkcolumnviewcell.c',
   'gtkcolumnviewcolumn.c',
   'gtkcombobox.c',
   'gtkcomboboxtext.c',